package logica.veiculo;

import java.io.Serializable;

/**
 * Automoveis herdam de veiculos em geral. Essa classe eh uma das que representa
 * os veiculos que sao alugados pela locadora.
 * @author Equipe Localisa (Usa quem precisa!)
 */

public class Automovel extends Veiculo implements Serializable{
	
	/**
         * Enum interno referente as opcoes: duas portas ou quatro.
	 * @author Equipe Localisa (Usa quem precisa!)
	 */
	public enum Porta{
		P2("2 portas",2),
		P4("4 portas",4);
		
		private String descricao;
		private int qtdePortas;
		
		/**
		 * @param A descricao da quantidade de portas
		 * @param A indicacao do numero de portas
		 */
		private Porta( String descricao, int qtde ){
			this.descricao = descricao;
			this.qtdePortas = qtde;
		}
		
		/**
		 * @return A descricao da constante
		 */
		public String getDescricao(){
			return this.descricao;
		}
		/**
		 * @return A quantidade de portas indicada pela constante
		 */
		public int getQtdePortas(){
			return this.qtdePortas;
		}
	}
	
	private transient static final long serialVersionUID = 1L;
	private Porta portas;
	
	public Automovel(){
		super();
		this.portas = Porta.P2;
	}
	
	/* (non-Javadoc)
	 * @see logica.veiculo.Veiculo#getPortas()
	 */
	public Porta getPortas() {
		return this.portas;
	}
	
	/* (non-Javadoc)
	 * @see logica.veiculo.Veiculo#setPortas(logica.veiculo.Automovel.Porta)
	 */
	public void setPortas(Porta portas) throws Exception{
		if ( portas == null ){
			throw new Exception("\n \t <Portas invalidas para o veiculo!>");
		}
		this.portas = portas;
	}
	
	/**
	 * Mostra uma representacao do objeto em String, revelando alguns
	 * de seus atributos
	 * @return Uma representacao em String do objeto Automovel
	 */
	@Override
	public String toString(){
		String format = "";
		format += "\n \t ______________________________________________________________\n";
		format += "\n \t Automovel de placa "+this.getPlaca()+" RENAVAM: "+this.getRenavam();
		format += "\n \t Modelo: "+this.getModelo()+" Ano: "+this.getAno()+" Marca: "+this.getMarca();
		format += "\n \t Potencia: "+this.getPotencia()+" "+this.getTipoDePotencia()+" "+this.getPortas().getDescricao();
		format += "\n \t Situacao: "+this.getEstado()+" Nivel de tanque: "+this.getNivelDoTanque()+" "+this.getTipoDeCombustivel();
		format += "\n \t Data de aquisicao: "+this.getDataDeAquisicao();
		format+="\n \t Acessorios: ";
		for ( int i=0; i<this.getAcessorios().size(); i++ ){
			if ( i%3 == 0 ){
				if ( this.getAcessorios().get(i) != null ){
					format+="\n \t  "+this.getAcessorios().get(i).getDescricao();
				}
			}
			else{
				if ( this.getAcessorios().get(i) != null ){
					format+=" + "+this.getAcessorios().get(i).getDescricao();
				}
			}
		}
		format += "\n \t ______________________________________________________________\n";
		return format;
	}
}